package com.meida.module.user.provider.service;

import com.meida.common.mybatis.base.service.IBaseService;
import com.meida.common.mybatis.entity.EntityMap;
import com.meida.common.mybatis.model.GetModel;
import com.meida.common.mybatis.model.ResultBody;
import com.meida.common.mybatis.model.SaveModel;
import com.meida.common.mybatis.model.UpdateModel;
import com.meida.common.security.OpenUser;
import com.meida.module.user.client.entity.AppUser;

import java.util.List;
import java.util.Map;

/**
 * 系统用户资料管理
 *
 * @author: zyf
 * @date: 2018/10/24 16:38
 * @description:
 */
public interface AppUserService extends IBaseService<AppUser> {


    /**
     * 根据用户ID获取用户信息
     *
     * @param userId
     * @return
     */
    AppUser getUserById(Long userId);


    /**
     * 获取当前用户详细信息
     *
     * @param model
     * @return
     */
    ResultBody getMineInfo(GetModel model);

    /**
     * 获取其他用户详细信息
     *
     * @param model
     * @return
     */
    ResultBody getUserInfo(GetModel model);

    /**
     * 登录初始化
     *
     * @param model
     * @return
     */
    ResultBody userInit(Map map);

    /**
     * 依据登录名查询系统用户信息
     *
     * @param username
     * @return
     */
    AppUser getUserByUsername(String username);

    /**
     * 依据手机号查询用户
     *
     * @param mobile
     * @return
     */
    AppUser getUserByMobile(String mobile);

    /**
     * 更新当前用户
     *
     * @param model
     */
    ResultBody updateMineInfo(UpdateModel model);

    /**
     * 更新用户
     *
     * @param model
     */
    ResultBody updateUser(UpdateModel model);

    /**
     * 绑定手机号
     */
    ResultBody<AppUser> bingMobile(String mobile, String smsCode);

    /**
     * 换绑手机号
     */
    ResultBody<Boolean> changeMobile(Long userId, String mobile, String smsCode);

    /**
     * 用户收藏关注
     */
    ResultBody setStatus(Long userId);


    /**
     * 用户绑定企业
     *
     * @param companyId
     */
    void bindCompany(OpenUser openUser);

    /**
     * 清空用户企业ID
     * @param companyId
     */
    void unBindCompany(Long companyId);

    /**
     * 保存用户
     */
    AppUser save(String usreName, String mobile, Long companyId);

    /**
     * 添加用户
     *
     * @return
     */
    ResultBody saveUser(SaveModel model);

    List<EntityMap> selectUsers(String userIds);

    /**
     * 注册账户
     *
     * @param model
     * @param accountName
     * @param telephone
     * @param smsCode
     * @param userType
     * @param password
     * @param userName
     * @param nickName
     * @param email
     * @param companyName
     * @param inviter
     * @param handlerName
     * @return
     */
    ResultBody registerAccount(Map params, String accountName, String telephone, String areaCode, String smsCode, String userType, String password, String userName, String nickName, String email, String companyName, String inviter,String handlerName);

     int totalCount(Map map, Integer status);

    ResultBody totalCountByType(Map map);
}
